/**
 * 将十六进制颜色转换为RGB值
 * @param {string} hex - 十六进制颜色值，可以包含可选的 "#" 前缀
 * @returns {object|null} - 包含RGB值的对象，如果输入无效则返回null
 * @throws {Error} - 如果输入的颜色格式或值无效，则抛出错误
 */
export function hexToRgb(hex) {
  const regex = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i
  const result = regex.exec(hex)

  if (!result) {
    throw new Error("无效的十六进制颜色格式")
  }

  const r = parseInt(result[1], 16)
  const g = parseInt(result[2], 16)
  const b = parseInt(result[3], 16)

  if (isNaN(r) || isNaN(g) || isNaN(b)) {
    throw new Error("无效的十六进制颜色值")
  }

  return { r, g, b }
}

/**
 * 将RGB颜色转换为十六进制颜色值
 * @param {number} r - 红色通道值（0-255）
 * @param {number} g - 绿色通道值（0-255）
 * @param {number} b - 蓝色通道值（0-255）
 * @returns {string} - 十六进制颜色值（带有 "#" 前缀）
 */
export function rgbToHex(r, g, b) {
  const hexR = r.toString(16).padStart(2, "0")
  const hexG = g.toString(16).padStart(2, "0")
  const hexB = b.toString(16).padStart(2, "0")
  return `#${hexR}${hexG}${hexB}`
}
